iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Python

一些Python可以做的事系列 第 25

[Python] 螢幕錄影

  • 分享至 

  • xImage
  •  

今天要做的是錄製螢幕影像並將其儲存為 MP4 格式的影片文件。

步驟

1. 獲取螢幕大小

screen_size = pyautogui.size()
  • 使用 pyautogui.size() 函數來獲取螢幕的寬度和高度,並將其存儲在 screen_size 變數中。

2. 設定幀率 (fps)、錄影時間和輸出檔名

fps = 10
duration = 10
output_filename = f"screen_recording.mp4"
  • fps(每秒幀數)設定為 10,表示每秒錄製 10 幀畫面。
  • duration(錄影時間)設定為 10 秒,表示錄影的總時長。
  • output_filename 是影片輸出的檔名,這裡設定為 "screen_recording.mp4"

3. 設定影片格式和建立 VideoWriter

fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter(output_filename, fourcc, fps, screen_size)
  • cv2.VideoWriter_fourcc(*"mp4v") 用來設定格式,"mp4v" 是用於 MP4 格式。
  • 使用 cv2.VideoWriter() 產生空的影片檔案 ( 設定格式、幀率 fps、長寬 )。參數包括:
    • output_filename:輸出文件名。
    • fourcc:影片格式。
    • fps:每秒幀數。
    • screen_size:影片的長寬尺寸。

4. 開始錄影

start_time = time.time()
  • 記錄當前時間作為錄影開始時間,以便後續用來計算錄影持續時間。

5. 捕獲螢幕畫面並寫入影片

while True:
    img = pyautogui.screenshot()
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
    out.write(frame)

    if time.time() - start_time > duration:
        break
  • 進入一個無窮迴圈,用於捕獲每一幀的螢幕畫面並將其寫入影片:
    • pyautogui.screenshot() 捕獲當前螢幕的畫面,並返回一個 PIL 圖像。
    • np.array(img) 將 PIL 圖像對象轉換為 NumPy 數組,使其能夠被 OpenCV 操作。
    • cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) 將 RGB 顏色模式的圖像轉換為 BGR 顏色模式,以符合 OpenCV 的要求。
    • out.write(frame) 將處理過的幀寫入影片文件中。
    • time.time() - start_time 用於檢查是否超過設定的錄影時間(duration),如果超過則跳出循環。

6. 釋放資源

out.release()
  • out.release() 釋放 VideoWriter 對象所佔用的資源,並完成影片文件的寫入和儲存。

7. 顯示完成訊息

print(f"螢幕錄影已保存至 {output_filename}")

完整程式碼

import cv2
import numpy as np
import pyautogui
import time

# 獲取螢幕大小
screen_size = pyautogui.size()
# 幀率(fps)
fps = 10
# 錄影時間
duration = 10 
# 輸出檔名
output_filename = f"screen_recording.mp4"

# 使用 cv2.VideoWriter_fourcc() 方法設定儲存的影片格式,這裡使用 'mp4v' 來保存為 MP4 格式
fourcc = cv2.VideoWriter_fourcc(*"mp4v")

# 使用 cv2.VideoWriter() 產生空的影片檔案 ( 設定格式、幀率 fps、長寬 )
out = cv2.VideoWriter(output_filename, fourcc, fps, screen_size)

# 記錄開始時間
start_time = time.time()  

while True:
    # 捕獲螢幕
    img = pyautogui.screenshot()

    # 將圖像轉換為 numpy 數組,這樣可以進行後續的 OpenCV 操作
    frame = np.array(img)

    # 使用 cvtColor() 方法可以改變圖片的色彩,將其從 RGB(pyautogui 默認)轉換為 BGR(OpenCV 默認)
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

    # 取得圖片的每一幀寫入到 VideoWriter
    out.write(frame)

    # 檢查是否超過指定的持續時間
    if time.time() - start_time > duration:
            break

# 釋放資源
out.release()
print(f"螢幕錄影已保存至 {output_filename}")

參考資料 :
https://steam.oxxostudio.tw/category/python/ai/opencv-write-video.html


上一篇
[Python] 檔案操作
下一篇
[Python] Keylogger
系列文
一些Python可以做的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言